
package fmu.pi.model.dao.old;

import fmu.pi.model.bean.*; 
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ContaDao extends Dao
{
    public Integer insert(Entidade entidade)
    {
        PreparedStatement statement = null; 
        Conta conta = (Conta) entidade; 
        Integer result = 0;
        final String QUERY = "insert into conta"
                + "(grupo_idgrupo, nome, tipo)"+
                "values(?, ?, ?);";
        try
        { 
            statement = getConnection().prepareStatement(QUERY);
            statement.setInt(1, conta.getIdGrupo()); 
            statement.setString(2, conta.getNome()); 
            statement.setString(3, conta.getTipo());
            result = statement.executeUpdate();
        }
        catch(SQLException exception)
        {
            System.err.println("Erro ao inserir conta no banco de dados!");
            exception.printStackTrace(); 
        }
        finally
        {
            try
            {
                if(statement != null)
                    statement.close(); 
            }
            catch(SQLException exception)
            {
                exception.printStackTrace(); 
            }
        }
        
        return result; 
    }
    
    public Integer update(Entidade entidade)
    {
        PreparedStatement statement = null; 
        Integer result = 0; 
        Conta conta = (Conta) entidade;
        final String QUERY = "update conta "
                + "set nome = ?, tipo = ?, grupo_idgrupo = ? "
                + "where idconta = " 
                + conta.getIdConta(); 
        try
        {
            statement = getConnection().prepareStatement(QUERY);
            statement.setString(1, conta.getNome()); 
            statement.setString(2, conta.getTipo()); 
            statement.setInt(3, conta.getIdGrupo()); 
            result = statement.executeUpdate();
        }
        catch(SQLException exception)
        {
            System.err.println("Erro ao alterar conta no banco de dados!"); 
            exception.printStackTrace(); 
        }
        finally
        {
            try
            {
                if(statement != null)
                    statement.close(); 
            }
            catch(SQLException exception)
            {
                exception.printStackTrace(); 
            }
        }
        
        return result; 
    }
    
    public Integer delete(Entidade entidade)
    {
        PreparedStatement statement = null; 
        Conta conta =(Conta) entidade;
        Integer result = 0; 
        final String QUERY = "delete from conta where idconta = " 
                +conta.getIdConta(); 
        try
        {
            statement = getConnection().prepareStatement(QUERY); 
            result = statement.executeUpdate(); 
        }
        catch(SQLException exception)
        {
            System.err.println("Erro ao apagar conta do banco de dados!"); 
            exception.printStackTrace(); 
        }
        finally
        {
            try
            {
                if(statement != null)
                    statement.close(); 
            }
            catch(SQLException exception)
            {
                exception.printStackTrace(); 
            }
        }
        
        return result; 
    }
    
    public List<Entidade> read()
    {
        PreparedStatement statement = null; 
        ResultSet resultSet = null; 
        List<Entidade> contas = new ArrayList<Entidade>();
        final String query = "select * from conta order by nome";
        
        try
        {
            statement = getConnection().prepareStatement(query);
            resultSet = statement.executeQuery();
            
            while(resultSet.next())
            {
                Conta conta = new Conta(); 
                conta.setIdConta(resultSet.getInt("idconta")); 
                conta.setIdGrupo(resultSet.getInt("grupo_idgrupo")); 
                conta.setNome(resultSet.getString("nome")); 
                conta.setTipo(resultSet.getString("tipo")); 
                contas.add(conta); 
            }
            
             
        }
        catch(SQLException exception)
        {
            System.err.println("Erro ao recuperar contas do banco!"); 
            exception.printStackTrace(); 
        }
        finally
        {
            try
            {
                if(statement != null){
                    statement.close();
                    resultSet.close(); 
                }
            }
            catch(SQLException exception)
            {
                exception.printStackTrace(); 
            }
        }
        
        return contas; 
    }
}
